<?php
import('ORG.Util.Page');

class Output
{
    /*
     * 创建实例
     */
    public static function instance($type = NULL)
    {
        return new Output($type);
    }

    /*
     * 设置相对于tpl的html模版
     * Output::instance()->tpl('add.html')
     */
    public function tpl($tpl)
    {
        $this->options['template'] = APP_TPL_PATH . $tpl;
        return $this;
    }

    /*
     * 设置相对于module的html模版
     * Output::instance()->module('test', 'add')
     */
    public function module($module, $html, $ext = 'html')
    {
        $this->options['template'] = module_html_path($module, $html, $ext);
        return $this;
    }

    /*
     *
     */
    public function backend($backend, $html, $ext = 'html')
    {
        $this->options['template'] = module_backend_path($backend, $html, $ext);
        return $this;
    }

    /*
     * 转换json对象为php对象
     */
    public function toObject($data)
    {
        // 带回车的会出错，屏蔽下面方法
// 		return json_decode(stripslashes(urldecode($data)));
        return json_decode(str_replace(array("\r\n", "\n", "\r", "\t", chr(9)),
            array("\\r\\n", "\\n", "\\r", "", ""), urldecode($data)));
    }

    /*
     * 输出object
     */
    public function object($obj)
    {
        $userName = Session::$user['userName'];
        $customerId = Session::$user['customerId'];
        $uid = Session::$user['userId'];
        $platCustomerId = C('PLANT_CUSTOMERID');
        Log::write("obj:\r\n" . var_export($obj, true));
        Log::write("type:\r\n" . var_export($this->options['type'], true));
        switch ($this->options['type']) {
            case output_type_json:
                if ($_GET['module'] == 'miContentShow') {
                    Log::write('userName--flag1:' . $userName . '|module:' . $_GET['module'] . '|method:' . $_GET['method'] . '|params:' . $_GET['params'] . '|type:' . $this->options['type']);
                    UserLog::addUserLog($userName, $_GET["module"], $_GET["method"], $_GET["params"]);
                }
                echo json_encode($obj);
                break;
            case output_type_html:
                $view = Think::instance('view');
                $pkg = WeixinApi::getSignPackage();
                if (isset($userName)) {
                    $obj["userName"] = $userName;
                }

                if ($customerId) {
                    $obj["customerId"] = $customerId;
                }
                if ($customerId == 10) {
                    $obj["TDAppid"] = '7A0D37504000596C72078F499E8BA9D0';
                } else if ($customerId == 19) {
                    $obj["TDAppid"] = '1A7906D337854EC867DF65F37B60603D';
                } else {
                    $obj["TDAppid"] = '64EE2DE1BBFF9F13026C9EA6571CAD3E';
                }
                $obj["platCustomerId"] = $platCustomerId;
                if ($uid) {
                    $obj["uid"] = $uid;
                }
                if ($pkg) {
                    $obj["pkg"] = $pkg;
                }
                if (is_array($obj)) {
                    $view->assign($obj);
                } else {
                    $view->assign('root', $obj);
                }
                $url = WeixinApi::getDomainName();
                C("SERVER_HOST", $url['SERVER_HOST']);
                C("SERVER_NAME", $url['SERVER_NAME']);
                C("RESOURCEURL", $url['RESOURCEURL']);
                UserLog::addUserLog($userName, $_GET["module"], $_GET["method"], $_GET["params"]);
                $view->display($this->options['template']);
                break;
        }
    }

    /*
     * 输出数组
     */
    public function objArray($objArray, $total = 0)
    {

        if ($total == 0) {
            $total = count($objArray);
        }

        if (isset($objArray) && !is_array($objArray)) {
            $objArray = array($objArray);
        } else {
            if (count($objArray) == 0) {
                $this->resultCode(code_success);
                return;
            }
        }

        $array = array('total' => $total, 'results' => $objArray);
        $this->object($array);
    }

    /*
     * 输出数组CSV
    */
    public function objArrayCsv($objArray, $titleObj = NULL, $fileName = 'temp.csv', $delimiter = ',', $enclosure = '"')
    {

        // 生成csv
        $handle = fopen('php://temp', 'r+');
        if (isset($titleArray)) {
            fputcsv($handle, $titleObj, $delimiter, $enclosure);
        }
        foreach ($objArray as $line) {
            fputcsv($handle, $line, $delimiter, $enclosure);
        }
        rewind($handle);
        while (!feof($handle)) {
            $contents .= fread($handle, 8192);
        }
        fclose($handle);

        // 输出
//		Header("Content-type: application/octet-stream");
        header("Content-Type: text/csv; charset=gbk");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length: " . strlen($contents));
        Header("Content-Disposition: attachment; filename=" . $fileName);
        // 输出文件内容
        $contents = iconv("utf-8", "gbk", $contents);
        echo $contents;
    }


    /**
     * 输出Excel
     * @param $expCellName 表格数据描述，即表头
     * @param $expTableData 表格数据
     * @param $fileName 保存文件名
     */
    public function objArrayExcel($fileName, $expCellName, $expTableData)
    {
        $cellNum = count($expCellName);
        $dataNum = count($expTableData);

        vendor("PHPExcel.PHPExcel");
        $objPHPExcel = new PHPExcel();

        /** 导出数据量比较大, 这里设置超时时间无限制, 无论之前脚本运行多长时间, 此函数都会重启超时计时器, 从0重新计时 */
        set_time_limit(0);
        // 设置Excel文件缓存
        $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;
        $cacheSettings = array('memoryCacheSize' => '8MB');
        PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

        $cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');
        if ($expCellName && $expCellName !== '') {
            for ($i = 0; $i < $cellNum; $i++) {
                $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . '1', $expCellName[$i][1]);
            }
            // Miscellaneous glyphs, UTF-8
            for ($i = 0; $i < $dataNum; $i++) {

                for ($j = 0; $j < $cellNum; $j++) {
                    $XS_SJ = $expTableData[$i][$expCellName[$j][0]];
                    //用' ' 处理数字为文本,以免excel中数字太大时科学计数法导致错误
                    $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 2), ' ' . $XS_SJ);//控制不能显示科学计数数字。
                }
            }
        } else {
            $i = 0;

            foreach ($expTableData as $key => $row) {
                $j = 0;
                if ($row["isNum"]) {
                    $isNum = explode(",", $row["isNum"]);
                    unset($row["isNum"]);
                }
                $title = $row['istitle'];
                if ($title && $title == 1) {
                    $expTableData[$key] = array_pop($row);
                }
                foreach ($row as $k1 => $cell) {
                    if ($title && $title == 1) {
                        $objPHPExcel->getActiveSheet(0)->getStyle($cellName[$j] . ($i + 1))->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
                        $objPHPExcel->getActiveSheet()->getStyle($cellName[$j] . ($i + 1))->getFill()->getStartColor()->setARGB('00F0F0F0');
                        $objPHPExcel->getActiveSheet()->getRowDimension($i + 1)->setRowHeight(24);
                    }
                    if ($isNum && in_array($j, $isNum) && $i != 0) {
                        $objPHPExcel->getActiveSheet()->setCellValueExplicit($cellName[$j] . ($i + 1), ' ' . $cell, PHPExcel_Cell_DataType::TYPE_NUMERIC);
                    } else {
                        $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 1), ' ' . $cell);
                    }
                    $objPHPExcel->getActiveSheet()->getStyle($cellName[$j])->getAlignment()->setWrapText(true);
                    $objPHPExcel->getActiveSheet()->getStyle($cellName[$j] . ($i + 1))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
                    $objPHPExcel->getActiveSheet()->getStyle($cellName[$j] . ($i + 1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                    $objPHPExcel->getActiveSheet()->getColumnDimension($cellName[$j])->setWidth(18);
                    $objPHPExcel->getActiveSheet()->getRowDimension($i + 2)->setRowHeight(40);
                    $j++;
                }
                $i++;
            }
        }

        header('pragma:public');
        header("Expires: 0");
        header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
        header("Content-Type:application/force-download");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");
// 		header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
        header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    }

    public function objArrayExcelToPath($fileName, $expCellName, $expTableData)
    {
        $cellNum = count($expCellName);
        $dataNum = count($expTableData);
        vendor("PHPExcel.PHPExcel");
        $objPHPExcel = new PHPExcel();
        $cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');
        if ($expCellName && $expCellName !== '') {
            for ($i = 0; $i < $cellNum; $i++) {
                $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . '1', $expCellName[$i][1]);
            }
            // Miscellaneous glyphs, UTF-8
            for ($i = 0; $i < $dataNum; $i++) {

                for ($j = 0; $j < $cellNum; $j++) {
                    $XS_SJ = $expTableData[$i][$expCellName[$j][0]];
                    //用' ' 处理数字为文本,以免excel中数字太大时科学计数法导致错误
                    $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 2), ' ' . $XS_SJ);//控制不能显示科学计数数字。
                }
            }
        } else {
            $i = 0;

            foreach ($expTableData as $key => $row) {
                $j = 0;
                if ($row["isNum"]) {
                    $isNum = explode(",", $row["isNum"]);
                    unset($row["isNum"]);
                }
                $title = $row['istitle'];
                if ($title && $title == 1) {
                    $expTableData[$key] = array_pop($row);
                }
                foreach ($row as $k1 => $cell) {
                    if ($title && $title == 1) {
                        $objPHPExcel->getActiveSheet(0)->getStyle($cellName[$j] . ($i + 1))->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
                        $objPHPExcel->getActiveSheet()->getStyle($cellName[$j] . ($i + 1))->getFill()->getStartColor()->setARGB('00F0F0F0');
                        $objPHPExcel->getActiveSheet()->getRowDimension($i + 1)->setRowHeight(24);
                    }
                    if ($isNum && in_array($j, $isNum) && $i != 0) {
                        $objPHPExcel->getActiveSheet()->setCellValueExplicit($cellName[$j] . ($i + 1), ' ' . $cell, PHPExcel_Cell_DataType::TYPE_NUMERIC);
                    } else {
                        $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 1), ' ' . $cell);
                    }
                    $objPHPExcel->getActiveSheet()->getStyle($cellName[$j])->getAlignment()->setWrapText(true);
                    $objPHPExcel->getActiveSheet()->getStyle($cellName[$j] . ($i + 1))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
                    $objPHPExcel->getActiveSheet()->getStyle($cellName[$j] . ($i + 1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                    $objPHPExcel->getActiveSheet()->getColumnDimension($cellName[$j])->setWidth(18);
                    $objPHPExcel->getActiveSheet()->getRowDimension($i + 2)->setRowHeight(40);
                    $j++;
                }
                $i++;
            }
        }
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save($fileName);
    }

    public function phpExcelList($field, $list, $title = '文件')
    {
        vendor('PHPExcel.PHPExcel');
        $objPHPExcel = new \PHPExcel();
        $objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel); //设置保存版本格式
        foreach ($list as $key => $value) {
            foreach ($field as $k => $v) {
                if ($key == 0) {
                    $objPHPExcel->getActiveSheet()->setCellValue($k . '1', $v[1]);
                }
                $i = $key + 2; //表格是从2开始的
                $objPHPExcel->getActiveSheet()->setCellValue($k . $i, $value[$v[0]]);
            }
        }

        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
        header("Content-Type:application/force-download");
        header("Content-Type:application/vnd.ms-execl");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");;
        header('Content-Disposition:attachment;filename=' . $title . '.xls');
        header("Content-Transfer-Encoding:binary");
//        $objWriter->save($title.'.xls');
        $objWriter->save('php://output');
    }

    /*
     * 输出Code
     * codeWx： 如果调用微信接口，将微信接口返回的错误id传入，则返回本系统定义的错误信息及微信定义的错误信息
     */
    public function resultCode($code = code_success, $msg = NULL, $codeWx = NULL)
    {
        if ($msg == NULL) {
            $msg = $this->code2Msg($code);
            if (isset($codeWx)) {
                $msg = $msg . '：' . $this->wxCode2Msg($codeWx);
            }
            $obj = array('code' => $code, 'msg' => $msg);
        } else {
            $obj = array('code' => $code, 'msg' => $msg);
        }

        if (isset($this->options['template'])) {
            $this->object($obj);
        } else {
            $this->tpl('error.html')->object($obj);
        }
    }

    /*
     * code转字符串
     */
    public function code2Msg($code)
    {
        switch ($code) {
            case code_success:
                return 'OK';
            case code_user_exist:
                return '用户已存在';
            case code_user_not_exist:
                return '用户不存在';
            case code_access_denied:
                return '拒绝访问，请重新登录';
            case code_user_wrong_pwd:
                return '密码不正确，请重新输入';
            case code_user_wrong_loginname:
                return '登录名不正确，请重新输入';
            case code_user_wrong_email:
                return '邮箱与注册邮箱不一致，请重新输入';
            case code_user_not_member:
                return '该页面仅会员可见，请注册为会员后查看';
            case code_system_error:
                return '系统错误，请稍后再试';
            case code_useragent_invalid:
                return '请在微信浏览器中进行该操作';
            case code_useragent_version_invalid:
                return '您的微信版本太低，请更新版本后进行该操作';
            case code_user_priv_invalid:
                return '您没有权限进行此操作';
            case code_user_status_close:
                return '帐号已停用';
            case code_sql_error:
                return "数据读写错误";
            case code_lackof_param:
                return "缺少参数，无法继续操作";
            case code_delete_pic:
                return "图片删除失败";
            case code_menu_create:
                return "菜单创建失败或存在尚未设置动作的菜单";
            case code_menu_get:
                return "获取菜单失败";
            case code_menu_delete:
                return "删除菜单失败";
            case code_access_expired:
                return "访问凭证过期";
            case code_device_not_exist:
                return "设备不存在";
            case code_webpage_not_exist:
                return "网页不存在";
            case code_webpage_add_tag_exist:
                return "文章标签已经存在";
            case code_fortunewheel_not_exist:
                return "幸运大转盘不存在";
            case code_vote_not_exist:
                return "投票已经不存在";
            case code_category_not_exist:
                return "类别不存在";
            case code_category_type_not_match:
                return "类别对应类型不匹配";
            case code_category_onlineorder_not_match:
                return "下单状态不匹配";
            case code_sql_add_repeat:
                return "添加重复数据";
            case code_product_not_exist:
                return "产品不存在";
            case code_qr_scene_no_invalid:
                return "没有可用的编号，无法生成门店、产品、员工二维码";
            case code_qr_scene_invalid:
                return "编号应在1-100000以内";
            case code_qr_create_error:
                return "二维码生成失败";
            case code_qr_scene_exist:
                return "编号已经存在";
            case code_member_card_not_exist:
                return "会员卡不存在";
            case code_qr_not_exist:
                return "二维码不存在";
            case code_qr_scene_no_available:
                return "可用编号已全部使用，没有可用编号";
            case code_product_price_points:
                return "不能同时设置价格和积分";
            case code_member_invalid:
                return "您还不是会员，不能进行此操作";
            case code_member_points_not_enough:
                return "您的积分不足，不能进行此操作";
            case code_userinfo_notset:
                return "没有设置接口AppId及AppSecret，请在帐号管理界面中配置该信息";
            case code_userinfo_api_auth:
                return "您的帐号不支持高级接口调用";
            case code_userinfo_api_auth_invalid:
                return "帐号授权失败";
            case code_userinfo_api_auth_not_set:
                return "帐号AppId或者AppSecret未设置，或者未设置已申请高级接口";
            case code_user_msg_send_fail:
                return "用户消息发送失败";
            case code_user_status_invalid:
                return '账号已停用';
            case code_user_oldpwd:
                return "用户旧密码错误";
            case code_user_list_error:
                return "用户列表获取失败";
            case code_user_refresh_failed:
                return "用户列表刷新失败";
            case code_user_refresh_failed_part:
                return "用户列表部分用户刷新失败";
            case code_product_pay_invalid:
                return "产品不支持支付";
            case code_product_pay_different:
                return "产品支付方式不同不能购买";
            case code_product_no_inventory:
                return "产品库存不足，不能购买";
            case code_product_pay_config:
                return "产品支付或配送方式未配置，不能购买";
            case code_product_pay_type:
                return "产品支付方式错误";
            case code_product_delivery_type:
                return "产品配送方式错误";
            case code_product_clothes_group_invalid:
                return "产品扩展属性组未设置";
            case code_product_clothes_color_invalid:
                return "产品颜色组中未设置颜色，不能进行该操作";
            case code_product_wxpay_pkg_param:
                return "微信支付接口缺少package参数";
            case code_product_wx_delivery_notify_failed:
                return "微信发货通知设置失败";
            case code_product_order_submitted:
                return "订单已经提交";
            case code_product_feedback_update_fail:
                return "维权销但失败";
            case code_product_order_status_invalid:
                return "订单状态错误";
            case code_product_order_refund_failed:
                return "退款失败";
            case code_product_refund_failed_miCoins:
                return "余额低于提现额";
            case code_product_wxpay_refund_not_exsit:
                return "微信退款信息不存在";
            case code_product_order_not_exist:
                return "订单不存在";
            case code_product_category_not_exist:
                return "产品类别不存在";
            case code_product_order_timeout:
                return "订单已过期，请重新下单";
            case code_product_add_losing:
                return "添加商品活动失败";
            case code_product_add_part_losing:
                return "未成功添加全部商品活动";
            case code_product_changed_pay_invalid:
                return "商家已修改产品信息，无法购买";
            case code_product_logistics_invalid:
                return "物流配送未设置，请联系管理员设置您的物流配送";
            case code_product_paytype_invalid:
                return "支付方式未设置，请联系管理员设置您的支付方式";
            case code_product_logistics_no_right:
                return "您没有权限开通该物流配送设置";
            case code_product_paytype_no_right:
                return "您没有权限开通该支付方式";
            case code_product_price_points_none:
                return "产品价格或积分未确定无法购买";
            case code_product_supliier_center_is_inserted :
                return "该商品已经从供货中心添加,请不要重复添加";
            case code_product_order_upay_error:
                return "银联支付提交失败";
            case code_product_order_access_denied:
                return "您没有权限操作该订单";
            case code_product_order_create_failed:
                return "订单创建失败";
            case code_product_order_status_change_invalid:
                return "订单尚未支付，无法修改此状态";
            case code_product_specification_group_inserted:
                return "该规格名称已经添加,请不要重复添加.";
            case code_product_specification_group_typeid_not_exist:
                return "添加规格组时发生错误: 类目ID不能为空";
            case code_product_order_refund_pem_not_exist:
                return "退款证书文件不存在";
            case code_product_add_tag_exist:
                return "商品展示分类已存在, 请不要重复添加";
            case code_product_member_not_exist:
                return "兑换商品需要成为会员，请先注册为会员";
            case code_product_invoice_person_no_right:
                return "同一种发票方式的发票明细已存在，请不要重复添加。";
            case code_product_order_none:
                return "您暂时还没有订单";
            case code_product_favorite_none:
                return "我的收藏暂时还没有内容";
            case code_event_over:
                return "活动已经过期";
            case code_event_before:
                return "活动暂未开始";
            case code_questionnaire_repeat:
                return "您已经参加过本次问卷调查了,谢谢您的参与!";
            case code_questionnaire_not_exist:
                return "问卷调查不存在";
            case code_keyword_repeat:
                return "关键字重复";
            case code_store_district_not_exist:
                return "门店尚未建立";
            case code_store_pickup_not_exist:
                return "无配送门店";
            case code_logistics_not_exist:
                return "物流信息不存在";
            case code_store_pickup_not_set:
                return "配送门店未设置";
            case code_member_bind_not_support:
                return "不支持会员卡绑定";
            case code_member_bind_code_invalid:
                return "验证码无效";
            case code_member_sms_no_point:
                return "短信暂时无法发送，请稍后再试";
            case code_member_sms_api:
                return "短信发送失败";
            case code_member_bind_invalid:
                return "会员卡绑定失败，请核对您填写的信息是否正确";
            case code_member_bind_other:
                return "会员卡绑定失败，如果您的信息已变更，请尝试其他绑定方式";
            case code_member_bind_too_much:
                return "线下会员卡注册信息不符，为了能完成绑定，请联系商家客服。确认注册会员卡的相关信息";
            case code_member_stored_not_enough:
                return "您的储值不足，不能进行此操作";
            case code_member_sms_chargeup_failed:
                return "充值失败";
            case code_member_not_exist:
                return '会员信息不存在';
            case code_member_not_check:
                return '您的会员资料未审核通过，无法兑换商品，请先完善资料！';
            case code_member_is_checking:
                return '您的会员资料正在审核中，暂时无法兑换商品';
            case code_member_subscribe_add:
                return "该名称为系统默认级别名称无法添加";
            case code_member_subscribe_edit:
                return "系统默认级别无法修改";
            case code_member_subscribe_delete:
                return "系统默认级别无法删除";
            case code_member_level_score_exist:
                return "所需积分/储值分值级别已经存在，请使用其他分值";
            case code_member_score_minus:
                return "扣减会员积分／储值后不能为负数";
            case code_member_extend_info_column_num_exist:
                return "会员扩展资料序号重复";
            case code_mall_setting_not_found:
                return "商户信息不存在，请在微商城模块中配置商户信息";
            case code_mall_setting_invalid:
                return "商户信息不完整，请在微商城模块中配置完整的商户信息";
            case code_mall_not_exist:
                return "微商城不存在";
            case code_excel_load_fail:
                return "加载导入文件失败";
            case code_excel_import_fail:
                return "导入商品失败，部分商品已导入成功";
            case code_excel_import_fail_all:
                return "导入产品失败";
            case code_excel_column_invalid:
                return "导入错误，请使用正确的模板导入";
            case code_excel_type_invalid:
                return "导入类型错误";
            case code_excel_spec_group_name_invalid:
                return "导入规格组名与现有规格组名不符";
            case code_excel_spec_name_invalid:
                return "导入规格名称与现有规格名称不符";
            case code_user_member_not_check:
                return '您的会员资料未审核通过，请先完善资料！';
            case code_user_member_is_checking:
                return '您的会员资料正在审核中';
            case code_wsq_user_block:
                return '您已被禁言';
            case code_wsq_post_not_exist:
                return '帖子不存在';
            case code_wsq_post_bump_invalid:
                return '已赞';
            case code_wsq_access_denied:
                return '您没有操作权限';
            case code_wsq_forum_not_exist:
                return '版块不存在';
            case code_wsq_topic_not_exist:
                return '话题不存在';
            case code_wsq_post_bump_self:
                return '不能顶自己的帖子';
            case code_wsq_group_op_invalid:
                return '不能对系统定义组进行该操作';
            case code_wsq_feedback_not_exist:
                return '反馈不存在';
            case code_wsq_forum_already_exist:
                return '版块名称已经存在';
            case code_wsq_topic_already_exist:
                return '话题名称已经存在';
            case code_wsq_forum_length_invalid:
                return '版块名称长度不能超过16个字节';
            case code_wsq_topic_length_invalid:
                return '话题名称不能超过40个字节';
            case code_wsq_loginname_exist:
                return '登录名已经存在，请使用其他登录名';
            case code_wsq_group_alreay_exist:
                return '组名已经存在';
            case code_expert_qa_expert_exist:
                return '此问题类别已经添加过该专家';
            case code_expert_qa_expert_not_exist:
                return '专家数据错误，请稍后再试';
            case code_expert_qa_post_close:
                return '此问题已经关闭，不能回答';
            case code_expert_qa_post_lock:
                return '此问题已经被其他人抢答，您不能回答';
            case code_expert_qa_user_is_block:
                return '由于某些原因，您不能提问了';
            case code_expert_qa_post_not_exist:
                return '该帖子不存在';
            case code_expert_qa_post_not_rate:
                return '该专家暂时还没有回答过问题';
            case code_red_envelope_not_exist:
                return '当前没有可以发放的红包，请稍后再试！';
            case code_red_envelope_money_not_enough:
                return '当前发放的红包余额不足';
            case code_red_envelope_send_person_sum_not_enough:
                return '很抱歉，当前已经超过红包发放人数上限！';
            case code_red_envelope_not_allow_send:
                return '很抱歉，您没有发红包权限！';
            case code_red_envelope_per_send_times_limit:
                return '很抱歉，您已经达到发送上限，不能发送红包！';
            case code_red_envelope_user_member_not_check:
                return '很抱歉，您的会员资料未审核通过，无法发送红包，请先完善资料！';
            case code_red_envelope_user_member_is_checking:
                return '很抱歉，您的会员正在审核中，暂时无法发送红包！';
            case code_red_envelope_user_member_level_fail:
                return '很抱歉，您的会员级别暂时无权限发送红包！';
            case code_red_envelope_user_not_member:
                return '很抱歉，您不是会员，无法发送红包，请注册成为会员！';
            case code_red_envelope_claim_money_not_enough:
                return '很抱歉，红包已经派完啦！';
            case code_red_envelope_user_not_subscribe:
                return '很抱歉，您无法查看红包详情，请先关注！';
            case code_red_envelope_claim_not_exist:
                return '很抱歉，您领取的红包不存在！';
            case code_red_envelope_activity_not_start:
                return '很抱歉，红包活动时间还没开始！';
            case code_red_envelope_activity_has_end:
                return '很抱歉，红包活动时间已过期！';
            case code_red_envelope_claim_list_over:
                return '数据加载完成！';
            case code_red_envelope_pick_up_fail:
                return '提现失败,请稍后重试！';
            case code_red_envelope_no_pick_up:
                return '没有可以提现红包！';
            case code_red_envelope_verify_code_has_expire:
                return '验证码已过期！';
            case code_red_envelope_has_claim:
                return '您已经领取过红包了！';
            case code_red_envelope_today_has_claim:
                return '您今天已经领取过红包了！';
            case code_red_envelope_has_claim_over_sum:
                return '您已经达到领取限额！';
            case code_red_envelope_claim_list_null:
                return '暂时还没有激活红包！';
            case code_red_envelope_claim_too_much_person:
                return '很抱歉,当前抢红包人数过多,请稍后再试手气！';


            case code_news_material_url_not_exist:
                return '没有素材url';
            case code_news_material_url_invalid:
                return '错误的素材链接';

            case code_friend_group_no_member:
                return '暂无会员';
            case code_friend_group_no_friend:
                return '暂无好友';
            case code_friend_group_no_applymakefriend:
                return '暂无名片交换申请人';
            case code_product_id_invalid:
                return '无效的商品ID';
            case code_supplier_is_exist:
                return '该供应商已存在';
            case code_supplier_AuditingStatus_exist:
                return '该审核状态已存在';
            case code_supplier_not_regist:
                return '请先注册成为供应商';
            case code_supplier_not_valid:
                return '您的供应商身份还没有通过审核';
            case code_channel_is_exist:
                return '该渠道商已存在';
            case code_agent_is_exist:
                return '该代理已存在';
            case code_agent_scale_is_exist:
                return '该代理分成比例已设置';
            case code_isnot_manager:
                return '只有管理员才能进行此操作';
            case code_business_isnot_exist:
                return '该渠道商不存在';
            case code_supplier_not_exist:
                return '该供应商不存在';
            case code_channel_not_regist:
                return '请先注册成为渠道商';
            case code_channel_not_valid:
                return '您的渠道商身份还没有通过审核';
            case code_business_is_exist:
                return '该渠道商已存在';
            case code_agent_channel_relation_is_exist:
                return '已经是渠道';
            case code_supplier_channel_scale_more_limit:
                return '分成比例不能大于100%';
            case code_supplier_channel_scale_litter_limit:
                return '分成比例不能小于0%';
            case cdoe_not_supplier_channel:
                return '您既不是供应商也不是渠道商，无法进行此操作';

            case code_chain_name_exist:
                return '该名称已经存在';
            case code_chain_sup_exist:
                return '该供应商已属于其他连锁体系';
            case code_chain_cha_exist:
                return '该渠道商已属于其他连锁体系';


            case code_deleted_activity:
                return '活动已删除';
            case code_member_not_access:
                return '您已经是俱乐部成员';
            case code_member_name_Repeat:
                return '已有该姓名俱乐部成员';
            case code_member_not_member:
                return '仅俱乐部内部成员可见';
            case code_mass_fail:
                return '群发消息失败';
            case code_mass_upload_media:
                return '上传素材失败';
            case code_mass_accesstag_no_user:
                return '当前标签下没有用户';
            case code_collectInformation_column_not_exist:
                return '采集项不存在，请添加采集项';

            case code_user_not_edit:
                return '没有编辑权限';
            case code_user_not_editor:
                return '没有主编权限';
            case code_user_not_bd:
                return '没有商务权限';
            case code_user_not_bdManager:
                return '没有商务主管权限';

            case code_weixin_error:
                return '微信交互错误';
        }

        return '未知错误';
    }

    private function wxCode2Msg($code)
    {
        switch ($code) {
            case 40001:
                return '获取access_token时AppSecret错误，或者access_token无效';
            case 40002:
                return '不合法的凭证类型';
            case 40003:
                return '不合法的OpenID';
            case 40004:
                return '不合法的媒体文件类型';
            case 40005:
                return '不合法的文件类型';
            case 40006:
                return '不合法的文件大小';
            case 40007:
                return '不合法的媒体文件id';
            case 40008:
                return '不合法的消息类型';
            case 40009:
                return '不合法的图片文件大小';
            case 40010:
                return '不合法的语音文件大小';
            case 40011:
                return '不合法的视频文件大小';
            case 40012:
                return '不合法的缩略图文件大小';
            case 40013:
                return '不合法的APPID';
            case 40014:
                return '不合法的access_token';
            case 40015:
                return '不合法的菜单类型';
            case 40016:
                return '不合法的按钮个数';
            case 40017:
                return '不合法的按钮个数';
            case 40018:
                return '不合法的按钮名字长度';
            case 40019:
                return '不合法的按钮KEY长度';
            case 40020:
                return '不合法的按钮URL长度';
            case 40021:
                return '不合法的菜单版本号';
            case 40022:
                return '不合法的子菜单级数';
            case 40023:
                return '不合法的子菜单按钮个数';
            case 40024:
                return '不合法的子菜单按钮类型';
            case 40025:
                return '不合法的子菜单按钮名字长度';
            case 40026:
                return '不合法的子菜单按钮KEY长度';
            case 40027:
                return '不合法的子菜单按钮URL长度';
            case 40028:
                return '不合法的自定义菜单使用用户';
            case 40029:
                return '不合法的oauth_code';
            case 40030:
                return '不合法的refresh_token';
            case 40031:
                return '不合法的openid列表';
            case 40032:
                return '不合法的openid列表长度';
            case 40033:
                return '不合法的请求字符，不能包含\uxxxx格式的字符';
            case 40035:
                return '不合法的参数';
            case 40038:
                return '不合法的请求格式';
            case 40039:
                return '不合法的URL长度';
            case 40050:
                return '不合法的分组id';
            case 40051:
                return '分组名字不合法';
            case 41001:
                return '缺少access_token参数';
            case 41002:
                return '缺少appid参数';
            case 41003:
                return '缺少refresh_token参数';
            case 41004:
                return '缺少secret参数';
            case 41005:
                return '缺少多媒体文件数据';
            case 41006:
                return '缺少media_id参数';
            case 41007:
                return '缺少子菜单数据';
            case 41008:
                return '缺少oauth code';
            case 41009:
                return '缺少openid';
            case 42001:
                return 'access_token超时';
            case 42002:
                return 'refresh_token超时';
            case 42003:
                return 'oauth_code超时';
            case 43001:
                return '需要GET请求';
            case 43002:
                return '需要POST请求';
            case 43003:
                return '需要HTTPS请求';
            case 43004:
                return '消息接收者目前未关注公众号';
            case 43005:
                return '需要好友关系';
            case 44001:
                return '多媒体文件为空';
            case 44002:
                return 'POST的数据包为空';
            case 44003:
                return '图文消息内容为空';
            case 44004:
                return '文本消息内容为空';
            case 45001:
                return '多媒体文件大小超过限制';
            case 45002:
                return '消息内容超过限制';
            case 45003:
                return '标题字段超过限制';
            case 45004:
                return '描述字段超过限制';
            case 45005:
                return '链接字段超过限制';
            case 45006:
                return '图片链接字段超过限制';
            case 45007:
                return '语音播放时间超过限制';
            case 45008:
                return '图文消息超过限制';
            case 45009:
                return '接口调用超过限制';
            case 45010:
                return '创建菜单个数超过限制';
            case 45015:
                return '回复时间超出48小时';
            case 45016:
                return '系统分组，不允许修改';
            case 45017:
                return '分组名字过长';
            case 45018:
                return '分组数量超过上限';
            case 46001:
                return '不存在媒体数据';
            case 46002:
                return '不存在的菜单版本';
            case 46003:
                return '不存在的菜单数据';
            case 46004:
                return '不存在的用户';
            case 47001:
                return '解析JSON/XML内容错误';
            case 48001:
                return 'api功能未授权';
            case 50001:
                return '用户未授权该api';
        }
        return '';
    }

    /*
     * 构造函数
     */
    function __construct($type = 'json')
    {
        if (isset($type)) {
            $this->options['type'] = $type;
        } else {
            $type = 'json';
            if (!empty($_GET['output'])) {
                $type = $_GET['output'];
            }
            $this->options['type'] = $type;
        }
    }

    /*
     * 保存配置
     */
    protected $options = array();
}